const cartsKey = 'localCartkey'

/*
// 购物车的数组，用来存储购物车中每个商品的信息对象
   每个商品的信息对象，都包含如下 6 个属性：
  { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
*/
// 存储购物车数据
const setLocalCarts = (goods_id, items) => {
	let cartList = []
	let loaclCarts = uni.getStorageSync(cartsKey);
	if (loaclCarts) {
		cartList = JSON.parse(loaclCarts) || [];
	}
	if (cartList.length == 0) {
		cartList.push(items);
	} else {
		const index = cartList.findIndex(item => item.goods_id === goods_id);
		if (index > -1) {
			// 如果购物车列表中已经存在该商品，则更新数量
			cartList[index].goods_count += items.goods_count;
		} else {
			// 如果购物车列表中不存在该商品，则添加到列表中
			cartList.push(items);
		}
	}
	uni.setStorageSync(cartsKey, JSON.stringify(cartList));
}

// 获取存储在本地的购物车数据
const getLocalCarts = () => {
	return JSON.parse(uni.getStorageSync(cartsKey) || '[]');
}

// 删除购物车中的特定商品
const deleteCartItem = (goods_id) => {
	const cartList = getLocalCarts();
	const newCartList = cartList.filter(item => item.goods_id !== goods_id);
	uni.setStorageSync(cartsKey, JSON.stringify(newCartList));
	return newCartList;
}

// 清空购物车
const clearCart = () => {
	uni.removeStorageSync(cartsKey);
}

// 修改购物车中特定商品的数量
/*
 goods_id : 为''时，修改所有商品, 不为''时,按照goods_id修改商品
 key: 需要修改的属性
 value: 修改后的值
*/
const updateCartItemCount = (goods_id, key, value) => {
	const cartList = getLocalCarts();
	if (goods_id == '') {
		const newCartList = cartList.map(item => {
			item[key] = value;
			return item;
		});
		uni.setStorageSync(cartsKey, JSON.stringify(newCartList));
		return newCartList;
	} else {
		const newCartList = cartList.map(item => {
			if (item.goods_id === goods_id) {
				item[key] = value;
			}
			return item;
		});
		uni.setStorageSync(cartsKey, JSON.stringify(newCartList));
		return newCartList;
	}
}

/*
这里面有几个亮点:

 setLocalCarts(goods_id, items)
  - 存储购物车数据
  - 存储时，如果购物车中已经存在该商品，则更新数量
  - 存储时，如果购物车中不存在该商品，则添加到列表中
  每个商品的信息对象，都包含如下 6 个属性：
  { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }

  
 updateCartItemCount(goods_id, key, value)
  - 修改购物车中商品的属性,
  - 修改时，如果goods_id为空，则修改所有商品
  - 修改时，如果goods_id不为空，则按照goods_id修改商品的属性
  --注意: key, value 是动态的，可以根据需要修改不同的属性

*/

export {
	setLocalCarts,     // 设置本地购物车信息数据 
	getLocalCarts,    //  获取本地购物车信息数据
	deleteCartItem,   //  删除购物车中的特定商品
	clearCart,        //  清空购物车
	updateCartItemCount  //  修改购物车中特定商品属性
}

